/**
 * ClientController.h
 *
 *  Created on: 2009-04-17
 *      Author: Jacek Suchowski
 *
 * Klasa odpowieadająca za zbieranie adresów MAC
 */

#ifndef MACCOLLECTOR_H_
#define MACCOLLECTOR_H_

#include <iostream>
#include <map>
#include <string>
#include "structures.h"

using namespace std;

class MacCollector
{
	/**
	 * Socket na którym działa MacCollector
	 */
	int sock;
	/**
	 * Zmienna przechowująca informację o wątku w którym działa MacCollector
	 */
	int threadHandle;
	/**
	 * Numer wątku.
	 */
	pthread_t threadId;
	/**
	 * Zmienna oznaczająca działanie MacCollectora
	 */
	bool isRunning;
	/**
	 * Metoda pomocnicza umożliwiająca uruchowmienie metody run() w osobnym wątku.
	 */
	static void *runFunc(void *);
	/**
	 * Metoda dodająca do collection nową parę adres IP i adres MAC
	 */
	void addMac(IP ip, MAC mac);

public:
	/**
	 * Konstruktor bez argumentowy
	 */
	MacCollector();
	/**
	 * Konstrukor umożliwiający uruchamianie w nowym wątku
	 * @param arg zmienna w oznaczająca czy powinien być tworzony nowy wątek
	 */
	MacCollector(bool arg);
	/**
	 * Destruktor klasy
	 */
	virtual ~MacCollector();
	/**
	 * Metoda odpowiedzialna za wykonywanie wątku
	 */
	void run();
	/**
	 * Metoda wyszukiwująca w kolekcji collection czy dla wskazanego IP jest podany adres MAC
	 * @param ip zawiera adres IP dla którego chcemy znaleźć adres MAC
	 */
	MAC findMac(IP ip);

};

#endif /* MACCOLLECTOR_H_ */
